<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script src="./jquery.3.7.1.js"></script>
    <script>
        // Promise 是es6引入的异步编程的新解决方案,解决的是回调地狱的问题. 语法上promise是一个构造函数,用来封装异步操作并获取其成功或失败
        // promise 的参数是一个回调函数.回调函数中有两个参数,第一个参数表示成功和第二个参数表示失败
        // promise中必须有成功和失败其中之一
        // .then()获取成功 .catch()获取失败


        // new Promise((res, rej) => {
        //     rej(`失败`)
        // }).then((a) => {
        //     console.log(a);
        // }).catch((e) => {
        //     console.log(e);
        // })

        // new Promise((res, rej) => {
        //     rej(`失败`)
        // }).then((a) => {
        //     console.log(a);
        // }).catch((e) => {
        //     console.log(e);
        // })

        // new Promise((res, rej) => {
        //     rej(`失败`)
        // }).then((a) => {
        //     console.log(a);
        // }).catch((e) => {
        //     console.log(e);
        // })



        // new Promise((res, rej) => {
        //     $.ajax({
        //         type: `GET`,
        //         url: `https://liu.zzgoodqc.cn/goodsx/goodslist`,
        //         dataType: `JSON`,
        //         success: (aa) => {
        //             res(aa) 
        //         },
        //         error: (ee) => {
        //             rej(`失败`)
        //         }
        //     })
        // }).then((a) => {
        //     console.log(a);
        // }).catch((e) => {
        //     console.log(e);
        // })

        // new Promise((res, rej) => {
        //     $.ajax({
        //         type: `GET`,
        //         url: `https://liu.zzgoodqc.cn/goodsx/goodslist`,
        //         dataType: `JSON`,
        //         success: (aa) => {
        //             res(aa) 
        //         },
        //         error: (ee) => {
        //             rej(`失败`)
        //         }
        //     })
        // }).then((a) => {
        //     console.log(a);
        // }).catch((e) => {
        //     console.log(e);
        // })
        // new Promise((res, rej) => {
        //     $.ajax({
        //         type: `GET`,
        //         url: `https://liu.zzgoodqc.cn/goodsx/goodslist`,
        //         dataType: `JSON`,
        //         success: (aa) => {
        //             res(aa) 
        //         },
        //         error: (ee) => {
        //             rej(`失败`)
        //         }
        //     })
        // }).then((a) => {
        //     console.log(a);
        // }).catch((e) => {
        //     console.log(e);
        // })

        // function fn(type_, url_) {
        //     return new Promise((res, rej) => {
        //         $.ajax({
        //             type: type_,
        //             url: url_,
        //             dataType: `JSON`,
        //             success: (s) => {
        //                 res(s)
        //             },
        //             error: (e) => {
        //                 rej(`失败`)
        //             }
        //         })
        //     })
        // }

        // fn(`GET`, `https://liu.zzgoodqc.cn/goodsx/goodslist`).then((a) => {
        //     console.log(a);
        // }).catch((e) => {
        //     console.log(e);
        // })

        // function fn(type_, url_) {
        //     return new Promise((res, rej) => {
        //         $.ajax({
        //             type: type_,
        //             url: url_,
        //             dataType: `JSON`,
        //             success: (s) => {
        //                 res(s)
        //             },
        //             error: (e) => {
        //                 rej(`失败`)
        //             }
        //         })
        //     })
        // }

        // fn(`GET`, `https://liu.zzgoodqc.cn/goodsx/goodslist`).then((a) => {
        //     console.log(a);
        // }).catch((e) => {
        //     console.log(e);
        // })

        // promise的三个静态方法
        // all:所有promise都成功时返回成功,有一个失败就返回失败
        function f1() {
            return new Promise((res, rej) => {
                var is = true
                if (is) {
                    res(`成功1`)
                } else {
                    rej(`失败1`)
                }
            })

        }
        function f2() {
            return new Promise((res, rej) => {
                var is = true
                if (is) {
                    res(`成功1`)
                } else {
                    rej(`失败1`)
                }
            })

        }
        function f3() {
            var is = false
            return new Promise((res, rej) => {
                if (is) {
                    res(`成功1`)
                } else {
                    rej(`失败1`)
                }
            })
        }
        // Promise.all([f1(), f2(), f3()])
        //     .then(s => {
        //         console.log(s);
        //     }).catch(e => {
        //         console.log(e);
        //     })


        // any 有一个promise成功就返回成功,所有promise都返回失败才返回失败
        // Promise.any([f1(), f2(), f3()])
        //     .then(s => {
        //         console.log(s);
        //     }).catch(e => {
        //         console.log(e);
        //     })

        // rase 返回最先执行完毕的promise的状态
        function f11() {
            return new Promise((res, rej) => {
                var is = true
                setTimeout(() => {
                    if (is) {
                        res(`成功1`)
                    } else {
                        rej(`失败1`)
                    }
                }, 1000)
            })
        }
        function f22() {
            return new Promise((res, rej) => {
                setTimeout(() => {
                    var is = false
                    if (is) {
                        res(`成功1`)
                    } else {
                        rej(`失败1`)
                    }
                }, 2000)
            })
        }
        function f33() {
            return new Promise((res, rej) => {
                setTimeout(() => {
                    var is = true
                    if (is) {
                        res(`成功1`)
                    } else {
                        rej(`失败1`)
                    }
                }, 500)
            })
        }
        Promise.race([f11(), f22(), f33()])
            .then(s => {
                console.log(s);
            }).catch(e => {
                console.log(e);
            })


    </script>

    <script>
        // 从一个数据集合中按照一定的顺序,不断提取数据的过程
        let arr = [1,2,3,4]
        let aaa = arr[Symbol.iterator]()
        console.log(aaa.next());
        

        //生成器是es6提供的异步编程解决方案,用来解决回调地狱的问题,生成器的返回值是一个迭代器
        function fun1() {
            setTimeout(() => {
                console.log(123);
                intr.next()
            }, 1000)
        }
        function fun2() {
            setTimeout(() => {
                console.log(456);
                intr.next()
            }, 1000)
        }
        function fun3() {
            setTimeout(() => {
                console.log(789);
            }, 1000)
        }
        function* fun(){
            yield fun1()
            yield fun2()
            yield fun3()
        }
        let intr = fun()
        intr.next()
    </script>
</body>

</html>